草庐IT

Java HotSpot 枚举开销

全部标签

C# - 检查属性是否存在于枚举的元素上

我遇到了如下情况:enumHeader{Sync,[OldProtocol]Keepalive,Ping,[OldProtocol]Auth,[OldProtocol]LoginData//...}我需要获取定义了OldProtocolAttribute的元素数组。我注意到Attribute.IsDefined()方法及其重载显然不支持这种情况。我的问题是:有没有办法在解决方案的任何部分不使用typeof(Header).GetField()的情况下解决问题?如果不是,解决它的最佳方法是什么? 最佳答案 据我所知,您必须从字段中获取

C# 或 VB.NET - 迭代所有公共(public)枚举

我们的源代码中有一个通用组件,它包含一个非常大的应用程序的所有枚举(大约300个!)。有没有什么方法可以使用C#或VB.NET遍历所有这些对象以便对每个对象执行一个操作?问题Howtoiterateall“publicstring”propertiesina.netclass几乎是相关的,但我正在处理的枚举是多种类型的混合 最佳答案 类似的东西?varquery=Assembly.GetExecutingAssembly().GetTypes().Where(t=>t.IsEnum&&t.IsPublic);foreach(Type

c# - C# 枚举类型安全吗?

C#枚举类型安全吗?如果不是,会有什么影响? 最佳答案 给出一个稍微不同的答案......虽然从转换的角度来看这些值是类型安全的,但一旦它们被转换它们仍然没有被检查-即enumFoo{A=1,B=2,C=3}staticvoidMain(){Foofoo=(Foo)500;//worksfineConsole.WriteLine(foo);//alsofine-shows500}因此,您应该注意检查值-例如default在switch抛出异常。您还可以通过以下方式检查(对于非[Flags]值):boolisValid=Enum.Is

c# - 从可枚举中获取下一个 N 个元素

上下文:C#3.0、.Net3.5假设我有一个生成随机数的方法(永远):privatestaticIEnumerableRandomNumberGenerator(){while(true)yieldreturnGenerateRandomNumber(0,100);}我需要将这些数字以10个为一组进行分组,所以我想要这样的东西:foreach(IEnumerablegroupinRandomNumberGenerator().Slice(10)){Assert.That(group.Count()==10);}我已经定义了Slice方法,但我觉得应该已经定义了一个。这是我的切片方法,

C# - 如何从枚举器创建数组

在C#中,从对象枚举器创建对象数组的最优雅方法是什么?例如在这种情况下,我有一个可以返回字节的枚举器,所以我想将其转换为byte[]。编辑:创建枚举器的代码:IEnumeratorenumerator=anObject.GetEnumerator(); 最佳答案 好的,所以,假设您有一个实际的枚举器(IEnumerator),您可以使用while循环:varlist=newList();while(enumerator.MoveNext())list.Add(enumerator.Current);vararray=list.ToA

c# - 为什么我们需要在 C# 中类型转换枚举

我有一个像这样的枚举:publicenumTest:int{A=1,B=2}所以在这里我知道我的枚举是一个int类型但是如果我想做如下的事情:inta=Test.A;这行不通。如果我有这样的类(class):publicclassMyTest{publicstaticintA=1;}我可以说,inta=MyTest.A;这里我不需要将A显式转换为int。 最佳答案 SohereIknowmyenumisaninttype不,不是。它有底层int类型,但它是一个单独的类型。哎呀,这就是首先使用枚举的一半意义-您可以将类型分开。当您想要

c# - 枚举器实现 : Use struct or class?

我注意到List将其枚举器定义为struct,而ArrayList将其枚举器定义为class.有什么不同?如果我要为我的类(class)写一个枚举器,哪个更好?编辑:使用yield无法满足我的要求,所以我正在实现自己的枚举器。也就是说,我想知道遵循List的路线是否会更好。并将其作为结构实现。 最佳答案 像其他人一样,我会选择一个类(class)。可变结构是讨厌的。(正如Jared所建议的那样,我会使用迭代器block。手动编写枚举器代码很费力才能正确。)参见thisthread例如,列表枚举器是一个导致问题的可变结构......

c# - 在 C# 中枚举集合的子集?

有没有一种在C#中仅枚举Collection的子集的好方法?也就是说,我有一个包含大量对象(比如1000)的集合,但我只想枚举250-340个元素。有没有一种好的方法可以为集合的子集获取枚举器,而无需使用另一个集合?编辑:应该提到这是使用.NETFramework2.0。 最佳答案 尝试以下操作varcol=GetTheCollection();varsubset=col.Skip(250).Take(90);或者更一般的publicstaticIEnumerableGetRange(thisIEnumerablesource,in

c# - 如何避免使用枚举?

直到询问question在这里我从来没有认为(枚举)是一件“坏事”。对于那些认为它们不是最佳实践的人,有哪些方法/模式可以避免在代码中使用它们?编辑:publicEnumSomeStatusApproved=1Denied=2Pending=3endEnum 最佳答案 Fowler的Refactoring中描述了枚举的问题。,它被认为是代码味道。它与类型安全无关,而是迫使您在整个代码中添加switch语句,从而违反了DRY原则。Statepattern是相同结构的更好模型,因为它允许您在同一类中实现和改变与相同状态相关的逻辑。这也增

c# - 枚举 lambdas 没有正确绑定(bind)作用域?

考虑以下C#程序:usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;publicclassTest{staticIEnumerableGet(){for(inti=0;iConsole.WriteLine(capture.ToString());}}publicstaticvoidMain(string[]args){foreach(varainGet())a();foreach(varainGet().ToList())a();}}在Mono编译器下执行时(例如Mono2.10.2.0-粘贴到here),它会写入